home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / ab20 / ab20_archive / utilities / shells / csh519g.lha / demo.sh < prev    next >
Text File  |  1991-12-30  |  13KB  |  459 lines

  1. # Dies hier ist ein Kommentar.
  2. # --------------------------- Hauptmenu ------------------------------
  3.  
  4. # Nachsehen, ob wir hier eine Csh 5.16 ode rhöher am Werke haben.
  5. # Die Variable $_version enthält die aktuelle Version, ein 'return'
  6. # Kommando beendet eine Stapeldatei.
  7.  
  8. if $_version < 516
  9.  echo "Schade, Csh Version 5.16 wird benötigt!";return 0
  10. endif
  11.  
  12.  
  13.  
  14. cls  # löscht Schirm.
  15.  
  16. # Das Echo Kommando wird benutzt eine Zeile auf den Schirm zu schreiben.
  17. # Achtung, ein schliessendes Anführungszeichen ist nicht notwendig.
  18.  
  19. echo "Das ist eine Beispiel Stapeldatei der Csh. Sie enthält eine Menge
  20. echo "nützlicher Aliase die Sie vielleicht fest installieren wollen,
  21. echo "aber der Hauptzweck ist es, als Anleitung zu dienen. Sehen Sie sich
  22. echo "um und verändern Sie nach belieben.
  23. echo
  24.  
  25.  
  26. # Jedes Csh KOmmando akzeptiert ^-Kode in seiner Kommandozeile, z.B.
  27. # ist ^A dasselbe wie CTRL-A, welches den ASCII Kode 1 repräsentiert.
  28. # Das kann benutzt werden, um z.B. ESC-Sequenzen zu generieren.
  29.  
  30. echo -n ^[[30m^[[41m                    # reverse Schrift, kein CR
  31. echo -n @center( " C H O I C E S " 76 ) # zentrierte Ausgabe
  32. echo    ^[[0m
  33. echo
  34. echo "[1] Primzahlen
  35. echo "[2] 'More' Textanzeiger
  36. echo "[3] Labyrinth Spiel
  37. echo "[4] Türme von Hanoi Spiel
  38. echo "[5] Backup/Versions Kontroll System
  39. echo "[6] Sinnvolle Aliase
  40. echo "[7] Mansplit, trennt ihre Csh-Anleitung auf.
  41.  
  42.  
  43. # Das 'input' Kommando liest eine Zeile von der Konsole und speichert
  44. ä diese in der angegebenen Variablen.
  45.  
  46. echo -n "> "
  47. input wahl
  48.  
  49. goto Start$wahl# Springt zu den Marken Start1, Start2, etc.
  50.  
  51.  
  52.  
  53.  
  54.  
  55. # ------------------------- Primzahlen -----------------------------
  56. # Das interessante an diesem Programm ist die Nutzung des 'fornum'
  57. # Kommandos und der Trick eine Matrix zu generieren. Die Information
  58. # ob 93 eine Primzahl ist, wird in der Variablen $prime93 gespeichert.
  59.  
  60. label Start1    # Startpunkt... Hierhin wird vom obigen Goto gesprungen
  61.  
  62. set max 100     # Höchste Zahl die auf Prim getestet werden soll
  63. echo "Berechne Primzahlen von 1 bis"$max
  64. fornum i 2 $max "set prime$i 1
  65.  
  66. # Jetzt folgt ein Kommandoblock. Alles wird intern zu einer Kommandozeile
  67. # verknüpft, getrennt durch Semikola. Deshalb sind schliessende
  68. # Anführungszeichen Pflicht, und Kommentare verboten.
  69.  
  70. fornum i 2 $max {
  71.  exec "set bool $prime"$i
  72.  if $bool
  73.   echo -n $i^i
  74.   fornum -s j $i $max $i "set prime$j 0"
  75.  endif
  76. }
  77. echo
  78.  
  79. return 0
  80.  
  81.  
  82.  
  83.  
  84. # ------------------------------ More -------------------------------
  85. # Diese Stapeldatei macht in etwa das, was auch das Programm 'More' tut.
  86. # Es demonstriert die Datei Ein- und Ausgabe-Kommandos und Datei
  87. # Behandlungsfunktionen.
  88.  
  89. label Start2
  90.  
  91. # Der Hilfstext für 'More', als Alias definiert.
  92. alias morehelp {
  93.  echo "  Leertaste Eine Seite weiter"
  94.  echo "  Enter     Eine Zeile weiter"
  95.  echo "  Backspace Eine Seite zurück"
  96.  echo "  <         An Anfang der Datei"
  97.  echo "  >         An Ende der Datei"
  98.  echo "  ESC, q    Ende"
  99.  echo "  h         Hilfe"
  100. }
  101.  
  102. echo "Das ist eine Annäherung eines Textanzeiger als Csh Stapeldatei.
  103. echo "Funktionen:"
  104. echo
  105. morehelp
  106. echo
  107.  
  108. echo -n "Geben Sie den Namen der anzusehenden Datei ein:"
  109. input text
  110. #set text test
  111. if -nf $text;echo "Datei nicht gefunden.";return 20;endif
  112.  
  113. # Hier wird die Datei in den Speicher eingeladen. Jede Zeile wird als
  114. # ein 'Wort' eingelesen, selbst wenn sie Leerzeichen beinhält. Für die
  115. # Wort-Definierung bitte in der csh.doc Anleitung nachsehen.
  116. readfile file $text
  117. # Jeder Gebrauch von $file wird von nun an eine GROSSE Kommandozeile
  118. # erbeben.
  119. set pos    1
  120. set page   @rpn( @winrows( ) 1 - )
  121. set lines  @flines( file )
  122. set bottom @rpn( $lines $page - 1 + )
  123.  
  124.  
  125. label Disp
  126.  
  127. cls
  128. set screen @subfile( file $pos $page )   # Schirmposition in $screen absichern
  129. writefile screen
  130.                                          # Berechnung, Anzeige der Prozent
  131. set perc @rpn( $pos $page + 1 - 100 \* $lines / 100 MIN )
  132. echo -n ^[[3m^[[30m^[[41m "-- More -- ("$perc"%)"^[[0m ""
  133.  
  134.  
  135. input -r c    # Wartet auf einen einfachen Tastenduck ohne CR
  136. set c x$c     # Hält das 'if' davon ab ein '<' misszuverstehen.
  137.  
  138. if $c = x" ";if $pos = $bottom;unset file;return 0;endif;endif
  139. if $c = x" ";inc pos $page;if $pos > $bottom;set pos $bottom;endif;endif
  140. if $c = x^m ;inc pos   1  ;if $pos > $bottom;set pos $bottom;endif;endif
  141. if $c = x^h ;dec pos $page;if $pos < 1;set pos 1;endif;endif
  142. if $c = x"<";set pos 1;endif
  143. if $c = x">";set pos $bottom;endif
  144. if $c = xq  ;unset file;return 0;endif
  145. if $c = x^[ ;unset file;return 0;endif
  146. if $c = xh  ;cls;morehelp;echo "Bitte Taste drücken.";input -r a;endif
  147. #if $c = x/  ;set char xf;endif
  148. #if $c = xf
  149. # echo -n "Zeichenkette: ";input str;search -fq $text $str | input found;
  150. # set found @subwords( $found 2 1000 );set c xn
  151. #endif
  152. #if $c = xn
  153. # set hop 0
  154. # foreach i ( $found ) "if $i > $pos;if $hop = 0;set hop $i;endif;endif
  155. # if $hop;set pos $hop;endif
  156. #endif
  157.  
  158. goto Disp
  159.  
  160.  
  161.  
  162.  
  163.  
  164. # ---------------------------- Labyrinth -------------------------------
  165. # Ich wollte schon immer mal ein Action Game als Stapeldatei schreiben :-)
  166. # Das Labyrinth ist als eine Zeichenkette abgespeichert, jede Zeile als
  167. # ein Wort. Ändern Sie es nach Ihrem belieben, die Größe wird automatisch
  168. # angepasst. Bitte keine automatische Tastenwiederholung einsetzen.
  169.  
  170. label Start3
  171.  
  172. set lab      "#########################"
  173. set lab $lab "#   #     #   #     #   #"
  174. set lab $lab "# # # ### ### ### # ### #"
  175. set lab $lab "# #   # #   #     # #   #"
  176. set lab $lab "# ##### ### ### ### # ###"
  177. set lab $lab "#   #   #   #   # #     #"
  178. set lab $lab "### # ### ### # # ##### #"
  179. set lab $lab "#       #     #   #      "
  180. set lab $lab "#########################"
  181.  
  182. cls
  183. writefile lab
  184. echo -n ^j"8=hoch 2=runter 4=links 6=rechts "^j^[[2A
  185. set x 2
  186. set y 2
  187. set wid @strlen( @word( $lab 1 ) )
  188. set up  @words( $lab )
  189. echo -n ^[[$up\A^[[B^[[C.^[[D
  190. alias test "%a%b set xx @rpn( $x $a + );set yy @rpn( $y $b + );\
  191.  set f @strmid( @word( $lab $yy ) $xx 1 )
  192.  
  193.  
  194. date -s
  195.  
  196. label Loop
  197.  
  198. input -r c
  199. if $c = 8;test 0 -1;if -n $f = "#";echo -n " "^H^[[A.^H;dec y;endif;endif
  200. if $c = 2;test 0  1;if -n $f = "#";echo -n " "^H^[[B.^H;inc y;endif;endif
  201. if $c = 6;test  1 0;if -n $f = "#";echo -n " "^H^[[C.^H;inc x;endif;endif
  202. if $c = 4;test -1 0;if -n $f = "#";echo -n " "^H^[[D.^H;dec x;endif;endif
  203. if $x >= $wid;cls;echo Glückwunsch, freigekommen in `date -r` Sekunden.
  204.  return 0
  205. endif
  206. goto Loop
  207.  
  208. return 0
  209.  
  210.  
  211.  
  212. # ------------------------------ Türme von Hanoi -----------------------
  213. # Dieses Spiel wurde auf Geschwindigkeit optimiert, es sieht daher nicht
  214. # so toll aus.
  215.  
  216. label Start4
  217.  
  218. set height 7 # Setze auf ungerade Zahlen bis 7
  219.  
  220. set h2 $height;inc h2
  221. cls
  222. unset t
  223. set t1 "9"; set t2 "9"; set t3 "9"   # die drei Türme
  224. fornum -s i $h2 2 -1 "set t1 $i$t1
  225. set done $t1
  226.  
  227. #Anzeige vorbereiten
  228. set im "x";set h @rpn( $height 2 \* 1 + )
  229. fornum -s i 1 $h 2 "set im $im @center( @strleft( XXXXXXXXXXXXXXX $i ) $h )
  230. fornum i $height 10 "set im $im \"               \"
  231.  
  232. cls
  233. echo
  234. echo "T Ü R M E  V O N  H A N O I
  235. echo "---------------------------
  236. echo
  237. echo "Das Spiel ist nicht sehr komfortable, aber es funktioniert ganz gut.
  238. echo "Sie müssen einen Stapel von Scheiben von dem ersten Turm auf den
  239. echo "dritten Umlegen, ohne dabei eine grössere Scheibe auf eine kleinere
  240. echo "zu legen. Um eine Scheibe von Turm 1 auf den Turm 3 zu bewegen, drücken
  241. echo "Sie erst '1' dann '3'. Sind Sie fertig, wird die benötigte Zeit
  242. echo "ausgegeben, nach CTRL-C wird das Spiel beendet. Sie werden keine
  243. echo "andere Ausgabe als die Türme sehen, solange das Spiel läuft.
  244. echo
  245. echo "PS: Teilen Sie mir mit, wenn Sie unter 60 Sekunden bleiben *grins*
  246. echo
  247. echo "Bitte eine Taste drücken, wenn fertig."
  248.  
  249. input -r x
  250. date -s
  251. cls
  252.  
  253. #display stack
  254. fornum  i 2 $h2 "echo \" \" @word( $im $i )
  255. echo
  256.  
  257. set m1 1;set m2 17;set m3 33
  258.  
  259. forever {
  260.  label Disp
  261.  input -r x;input -r y
  262.  exec "set src $t"$x";set dst $t"$y";set rt1 $m"$x";set rt2 $m"$y
  263.  strleft move $src 1
  264.  if a$move""a >= a$dst""b
  265.   echo -n ^g
  266.  else
  267.   strlen up1 $src; strlen up2 $dst; inc up2
  268.   echo -n \233$up1""A\233$rt1""C"                "^m\233$up1""B\
  269. \233$up2""A\233$rt2""C @word( $im $move ) ^m\233$up2""B
  270.   set t$y $move$dst
  271.   strmid t$x $src 2
  272.  endif
  273.  if $t3 = $done;echo ^j^j;date -r;endif
  274. }
  275.  
  276. return 0
  277.  
  278.  
  279.  
  280.  
  281. # ---------------------- Backup/Version control -------------------------------
  282. # Das ist eine Stapeldatei, die Sie vielleicht wirklich regelmäßig
  283. # anwenden wollen. Sie kopiert (backup) eine Menge von Dateien in einen
  284. # anderen Ordner, dabei werden alte Versionen nicht überschrieben.
  285. # Trennen Sie diese Stapeldatei heraus, und rufen Sie es aus .login
  286. # oder woher auch immer aufm wenn Sie ihre C-Programmierumgebung
  287. # installieren. Wird die Verzögerung auf 0 gesetzt, stellen Sie sicher
  288. # das diese Stapeldatei immer ausgeführt wird.
  289.  
  290. label Start5
  291.  
  292. set versions 3         # Maximale Anzahl alter zu behaltender Versionen
  293. set delay    1         # Minimale Anzahl Tage zwischen den Kopien
  294. set dest     bak       # Der Zielordner der Kopien
  295. set pattern  "*.c *.h" # Das Suchmuster für zu kopierende Dateien
  296. set exlude   "x.c y.c" # Nicht zu kopierende Dateien
  297.  
  298.  
  299. #----- Umgebung setzen -----
  300. if -nd $dest
  301.  echo -n "Ordner "$dest" existiert nicht... erstellen? y/n: ";input x
  302.  if $x = y;mkdir $dest;else;echo "Beendet...";return 0;endif
  303. endif
  304.  
  305. if -f $dest/timestamp
  306.  set last @age( $dest/timestamp )
  307.  if $last < $delay
  308.   echo "Keine Kopie erstellt... Letze erstelle Kopie ist "$last" Tag(e) alt."
  309.   return 0
  310.  endif
  311. else
  312.  echo >$dest/timestamp
  313. endif
  314.  
  315.  
  316. #----- Teste auf geänderte Dateien ----
  317. echo "Teste Dateien...."
  318. exec set all $pattern              # Hier wird das Suchmuster expandiert
  319.  
  320. set cp ""                          # Zu kopierende Dateien
  321. foreach i ( $all ) "if -nt $i $dest/$i;set cp $cp $i;endif
  322.  
  323. exec set exclude $exclude          # Die exklusiven Dateien werden expandiert
  324. set cp @without( $cp , $exclude )
  325.  
  326. if $cp = "";echo "Fertig.";touch $dest/timestamp;return 0;endif
  327. echo "Zu kopierende Dateien:"
  328. echo $cp
  329. # Löschen Sie das Kommentarzeichen um einen Sicherheitscheck erfolgen zu
  330. # lassen.
  331. # set cp @confirm( Backup $cp )
  332. if $cp = "";echo "Fertig.";touch $dest/timestamp;return 0;endif
  333.  
  334.  
  335. #------ Kopien erstellen -------
  336. alias name "%a set n $dest/$i;if $a;set n $n.$a;endif
  337.  
  338. foreach i ( $cp ) {
  339.  set v $versions;dec v
  340.  name $v;dec v
  341.  if -f $n;rm $n;endif
  342.  fornum -s j $v 0 -1 "set hi $n;name $j;if -f $n;mv $n $hi;endif"
  343.  cp $i $dest
  344. }
  345.  
  346. touch $dest/timestamp
  347. echo "Fertig."
  348.  
  349. return 0
  350.  
  351.  
  352.  
  353.  
  354.  
  355. # ---------------------- Hilfsreiche Aliase --------------------------
  356. # Lesen Sie die Kommentare eines jeden Alias, um herauszufinden, ob
  357. # das Alias für Sie hilfsreich ist. Kopieren Sie es dann in die login
  358. # Datei.
  359.  
  360. label Start6
  361. # Ein paar nützliche Aliase für das dir Kommando
  362. alias  d   "*a dir @pickopts( $a ) -ze \"%6s %-.12n%m\" @pickargs( $a )
  363. alias  lst "*a ls -t $a"    # sortiert nach Alter
  364. alias  lsl "*a ls -l $a"    # sortiert nach Länge
  365. alias  move "cp -m
  366.  
  367. # sc searches *.c, even 'sc -c main()' works
  368. alias  sc "%a search @pickopts( $a ) *.c @pickargs( $a )
  369.  
  370. # edf editiert eine Funktion im CygnusEd wenn der Name in der ersten
  371. # Zeile angegeben wird:
  372. alias  edf {
  373. %func
  374.  set b ""
  375.  search -afl *.c $func | inp b
  376.  if $b
  377.   split b file line
  378.   lced $file
  379.   waitforport rexx_ced
  380.   inc line 1
  381.   rxsend rexx_ced "jump to file "$file "jumpto "$line" 0"
  382.  else
  383.   echo Not found
  384.  endif
  385. }
  386.  
  387. # Diese Aliase unterdrücken Suchmuster Expandierng in einigen Kommandos
  388. alias  zoo     "*a Zoo $a
  389. alias  lharc   "*a Lharc $a
  390. alias  lz      "*a Lz $a
  391. alias  newlist "*a Newlist $a
  392. alias  eval    "*a Eval $a
  393.  
  394. # Dieses hier wird alle Bilder anzeigen, das neueste zuerst.
  395. alias  newpix  "ls -nt | forline i STDIN \"ShowIFF $i
  396.  
  397. # Wollen Sie ein Csh Kommando mit 'run' im Hintergrund starten, benutzen
  398. # sie dieses Alias:
  399. alias rs "rback csh -c
  400.  
  401. # Ein paar Aliase für die UNIX Freunde unter uns
  402.  
  403. # Dieses Alias ahmt das chmod Kommando nach, welches die Bits zuerst und
  404. # dann erst die Dateien erwartet:
  405. alias chmod "%a protect @subwords( $a 2 9999 ) @first( $a )
  406.  
  407. # Genauso bei grep:
  408. alias grep "%a search @subwords( $a 2 9999 ) @first( $a )
  409.  
  410. # pushd schiebt den aktuellen Ordner auf den Stack
  411. set stk ""
  412. alias  pushd "%a set stk $_cwd @subwords( $stk 1 10 );\\cd $a;e $stk
  413.  
  414. # popd  holt den mit pushd erzeugten Ordner, und wechselt dorthin
  415. alias  popd  "\\cd @first( $stk );set stk @subwords( $stk 2 10 );e $stk
  416.  
  417. echo "Hilfsreiche Aliase erzeugt. Lesen Sie diese Stapeldatei um
  418. echo "herauszufinden ob ein paar für Sie sinnvolle dabei sind.
  419.  
  420. return 0
  421.  
  422.  
  423.  
  424.  
  425.  
  426. # ----------------------- Mansplit.sh - Trennt das csh.doc -------------
  427. # Trennt das csh.doc in kleine Dateien auf, eins pro Hilfseintrag.
  428. # So können externe 'Man' Kommandos mit ihnen arbeiten, diese sind normal
  429. # schneller als das interne.
  430.  
  431. label Start7
  432.  
  433. echo "Ein wenig Geduld...
  434. set dest ram:cshdoc/           # Setzen Sie hier Ihren Ordner ein
  435. if -nd ram:cshdoc;mkdir ram:cshdoc;endif   # ...und hier
  436. set mode skip
  437. forline i csh:csh.doc {
  438.  if $mode = write
  439.   if @strleft( $i^a 1 ) < " "
  440.    echo >>$dest$file $i
  441.   else
  442.    set mode skip
  443.   endif
  444.  endif
  445.  if $mode = skip
  446.   if "    " = @strleft( $i 4 )
  447.    set mode write
  448.    set a @index( $i "(" )
  449.    if $a > 0;dec a 1;strleft i $i $a;endif
  450.    set file $i
  451.    echo >$dest$file $i
  452.    echo $file
  453.   endif
  454.  endif
  455. }
  456. echo "csh.doc auftrennung erfolgt im Ordner "$dest
  457.  
  458. return 0
  459.